diff --git a/system/database/DB_utility.php b/system/database/DB_utility.php
index 36d74c5..950db7d 100644
--- a/system/database/DB_utility.php
+++ b/system/database/DB_utility.php
@@ -65,6 +65,30 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Primary
+	 *
+	 * Retrieves the primary key.  It assumes that the row in the first
+	 * position is the primary key
+	 * 
+	 * @access	public
+	 * @param	string	the table name
+	 * @return	string		 
+	 */	
+	function primary($table = '')
+	{	
+		$fields = $this->field_names($table);
+		
+		if ( ! is_array($fields))
+		{
+			return FALSE;
+		}
+
+		return current($fields);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Returns an array of table names
 	 * 
 	 * @access	public
@@ -188,39 +212,15 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Primary
-	 *
-	 * Retrieves the primary key.  It assumes that the row in the first
-	 * position is the primary key
-	 * 
-	 * @access	public
-	 * @param	string	the table name
-	 * @return	string		 
-	 */	
-	function primary($table = '')
-	{	
-		$fields = $this->field_names($table);
-		
-		if ( ! is_array($fields))
-		{
-			return FALSE;
-		}
-
-		return current($fields);
-	}
-
-	// --------------------------------------------------------------------
-
-	/**
 	 * Create database
 	 *
 	 * @access	public
 	 * @param	string	the database name
 	 * @return	bool
 	 */
-	function create_database($name)
+	function create_database($db_name)
 	{
-		$sql = $this->_create_database($name);
+		$sql = $this->_create_database($db_name);
 		
 		if (is_bool($sql))
 		{
@@ -239,9 +239,9 @@
 	 * @param	string	the database name
 	 * @return	bool
 	 */
-	function drop_database($name)
+	function drop_database($db_name)
 	{
-		$sql = $this->_drop_database($name);
+		$sql = $this->_drop_database($db_name);
 		
 		if (is_bool($sql))
 		{
@@ -273,6 +273,51 @@
 			
 		return $dbs;
 	}
+	
+	// --------------------------------------------------------------------
+
+	/**
+	 * Optimize Table
+	 *
+	 * @access	public
+	 * @param	string	the table name
+	 * @return	bool
+	 */
+	function optimize_table($table_name)
+	{
+		$sql = $this->_optimize_table($table_name);
+		
+		if (is_bool($sql))
+		{
+			return $sql;
+		}
+	
+		$query = $this->db->query($sql);
+		return current($query->result_array());
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Optimize Table
+	 *
+	 * @access	public
+	 * @param	string	the table name
+	 * @return	bool
+	 */
+
+	function repair_table($table_name)
+	{
+		$sql = $this->_repair_table($table_name);
+		
+		if (is_bool($sql))
+		{
+			return $sql;
+		}
+	
+		$query = $this->db->query($sql);
+		return current($query->result_array());
+	}
 
 	// --------------------------------------------------------------------
 
@@ -283,9 +328,9 @@
 	 * @param	string	the table name
 	 * @return	bool
 	 */
-	function drop_table($name)
+	function drop_table($table_name)
 	{
-		$sql = $this->_drop_table($name);
+		$sql = $this->_drop_table($table_name);
 		
 		if (is_bool($sql))
 		{
@@ -296,23 +341,6 @@
 	}
 
 
-	
-	function alter_table()
-	{
-	}
-	
-	function create_index()
-	{
-	}
-	
-	function drop_index()
-	{
-	}
-	
-	function optimize()
-	{
-	}
-
 
 
 }
